
Emma Foster
Machine Learning Engineer

Seiring dengan otomatisasi yang didorong oleh AI semakin praktis dalam alur kerja dunia nyata, Agno telah muncul sebagai kerangka kerja yang cepat dan berfokus pada privasi untuk membangun sistem multi-agent otonom. Ketika agen-agen ini berinteraksi dengan situs web melalui scraping, pengumpulan data, atau penjelajahan otomatis, CAPTCHA sering menjadi masalah.
CapSolver membantu menyelesaikan masalah ini dengan memungkinkan agen Agno menangani halaman yang dilindungi CAPTCHA secara andal tanpa mengganggu alur otomatisasi. Bersama, Agno dan CapSolver membuatnya lebih mudah untuk membangun otomatisasi yang skalabel dan tanpa campur tangan manual yang berjalan di situs web nyata.
Agno adalah kerangka kerja dan lingkungan runtime multi-agent open-source untuk membangun sistem AI yang berjalan sepenuhnya di dalam infrastruktur Anda sendiri. Didesain dengan kinerja dan privasi dalam pikiran—tidak ada kontrol plane eksternal dan tidak ada data yang keluar dari lingkungan Anda.
| Komponen | Deskripsi |
|---|---|
| Agent | Unit AI otonom dengan memori, alat, dan integrasi model |
| Tim | Kelompok agen yang bekerja sama pada tugas kompleks |
| Alur Kerja | Pipelines terstruktur untuk eksekusi yang terprediksi |
| AgentOS | Runtime FastAPI untuk pengembangan produksi |
CapSolver adalah layanan penyelesaian CAPTCHA terkemuka yang menyediakan solusi berbasis AI untuk melewati berbagai tantangan CAPTCHA. Dengan dukungan untuk berbagai jenis CAPTCHA dan respons yang cepat, CapSolver terintegrasi dengan mulus ke dalam alur kerja otomatis.
Ketika membangun agen Agno yang berinteraksi dengan situs web—baik untuk pengumpulan data, pengujian otomatis, atau agregasi konten—tantangan CAPTCHA menjadi penghalang signifikan. Untuk penjelasan lebih dalam tentang menyelesaikan CAPTCHA dalam lingkungan browser otomatis, lihat panduan kami tentang cara menyelesaikan CAPTCHA di Puppeteer. Berikut adalah alasan mengapa integrasi ini penting:
Pertama, instal paket yang diperlukan:
pip install agno
pip install requests
Agno adalah model-agnostic dengan dukungan bawaan untuk 23+ penyedia LLM:
# OpenAI
from agno.models.openai import OpenAIChat
# Anthropic Claude
from agno.models.anthropic import Claude
# Google Gemini
from agno.models.google import Gemini
# Dan banyak lagi...
Agno memungkinkan Anda membuat alat kustom yang dapat digunakan agen untuk menyelesaikan tugas mereka. Berikut cara membuat alat CapSolver untuk menangani tantangan CAPTCHA:
import requests
import time
from agno.tools import tool
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
@tool
def solve_captcha(
website_url: str,
website_key: str,
captcha_type: str = "ReCaptchaV2TaskProxyLess"
) -> str:
"""
Menyelesaikan tantangan CAPTCHA menggunakan API CapSolver.
Args:
website_url: URL situs web dengan CAPTCHA
website_key: Kunci situs CAPTCHA
captcha_type: Jenis CAPTCHA (ReCaptchaV2TaskProxyLess, ReCaptchaV3TaskProxyLess, AntiTurnstileTaskProxyLess)
Returns:
Token solusi CAPTCHA
"""
# Membuat tugas
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": captcha_type,
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error membuat tugas: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Memantau hasil
for _ in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
solution = result.get("solution", {})
return solution.get("gRecaptchaResponse") or solution.get("token")
elif result.get("status") == "failed":
return f"Tugas gagal: {result.get('errorDescription')}"
return "Timeout menunggu solusi CAPTCHA"
import requests
import time
from agno.tools import tool
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
@tool
def solve_recaptcha_v2(website_url: str, website_key: str) -> str:
"""
Menyelesaikan tantangan reCAPTCHA v2 menggunakan CapSolver.
Args:
website_url: URL situs web dengan reCAPTCHA v2
website_key: Kunci situs (atribut data-sitekey)
Returns:
Token g-recaptcha-response
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
# Membuat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Memantau hasil
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout menunggu solusi"
import requests
import time
from agno.tools import tool
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
@tool
def solve_recaptcha_v3(
website_url: str,
website_key: str,
page_action: str = "submit",
min_score: float = 0.7
) -> str:
"""
Menyelesaikan tantangan reCAPTCHA v3 dengan verifikasi berdasarkan skor.
Args:
website_url: URL situs web dengan reCAPTCHA v3
website_key: Kunci situs reCAPTCHA
page_action: Parameter tindakan untuk reCAPTCHA v3
min_score: Skor minimum yang diperlukan (0.1 hingga 0.9)
Returns:
Token g-recaptcha-response
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key,
"pageAction": page_action,
"minScore": min_score
}
}
# Membuat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Memantau hasil
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout menunggu solusi"
import requests
import time
from agno.tools import tool
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
@tool
def solve_turnstile(website_url: str, website_key: str) -> str:
"""
Menyelesaikan tantangan Cloudflare Turnstile.
Args:
website_url: URL situs web dengan Turnstile
website_key: Kunci situs Turnstile
Returns:
Token Turnstile
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
# Membuat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
# Memantau hasil
for attempt in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout menunggu solusi"
import requests
import time
from agno.tools import tool
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
@tool
def solve_cloudflare_challenge(website_url: str, proxy: str) -> dict:
"""
Menyelesaikan halaman Cloudflare 5 detik.
Args:
website_url: URL halaman yang dilindungi
proxy: Proxy dalam format: http://user:pass@ip:port
Returns:
Kamus dengan cookie dan user_agent untuk mengakses halaman yang dilindungi
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiCloudflareTask",
"websiteURL": website_url,
"proxy": proxy
}
}
# Membuat tugas
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return {"error": result.get('errorDescription')}
task_id = result.get("taskId")
# Memantau hasil
for attempt in range(60):
time.sleep(3)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return {
"cookies": result["solution"]["cookies"],
"user_agent": result["solution"]["userAgent"]
}
if result.get("status") == "failed":
return {"error": result.get('errorDescription')}
return {"error": "Timeout menunggu solusi"}
Berikut adalah contoh lengkap agen Agno yang menggunakan CapSolver untuk menangani tantangan CAPTCHA:
import os
import requests
import time
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools import tool
# Konfigurasi
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
@tool
def solve_recaptcha_v2(website_url: str, website_key: str) -> str:
"""
Menyelesaikan tantangan reCAPTCHA v2 menggunakan CapSolver.
Args:
website_url: URL situs web dengan reCAPTCHA v2
website_key: Kunci situs (atribut data-sitekey)
Returns:
Token g-recaptcha-response atau pesan kesalahan
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
for _ in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout"
@tool
def solve_turnstile(website_url: str, website_key: str) -> str:
"""
Menyelesaikan tantangan Cloudflare Turnstile.
Args:
website_url: URL situs web dengan Turnstile
website_key: Kunci situs Turnstile
Returns:
Token Turnstile atau pesan kesalahan
"""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
for _ in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout menunggu solusi"
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout"
@tool
def cek_saldo_capsolver() -> str:
"""
Memeriksa saldo akun CapSolver saat ini.
Mengembalikan:
Informasi saldo saat ini
"""
response = requests.post(
"https://api.capsolver.com/getBalance",
json={"clientKey": CAPSOLVER_API_KEY}
)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
return f"Saldo: ${result.get('balance', 0):.4f}"
# Membuat Agen Pengekstrak Web
agen_pengekstrak_web = Agent(
name="Agen Pengekstrak Web",
model=OpenAIChat(id="gpt-4o"),
tools=[selesaikan_recaptcha_v2, selesaikan_turnstile, cek_saldo_capsolver],
description="Spesialis pengekstrakan web yang menangani tantangan CAPTCHA secara otomatis",
instructions=[
"Anda adalah spesialis pengambilan data web dengan kemampuan penyelesaian CAPTCHA.",
"Ketika menemui CAPTCHA, identifikasi jenisnya dan gunakan solver yang sesuai.",
"Untuk reCAPTCHA v2, gunakan selesaikan_recaptcha_v2 dengan URL dan site key.",
"Untuk Turnstile, gunakan selesaikan_turnstile dengan URL dan site key.",
"Selalu periksa saldo sebelum memulai tugas pengekstrakan besar."
],
markdown=True
)
def main():
print("=" * 60)
print("Demo Integrasi Agno + CapSolver")
print("=" * 60)
# Tugas: Menyelesaikan tantangan reCAPTCHA
tugas = """
Saya perlu Anda menyelesaikan tantangan reCAPTCHA v2.
URL Situs Web: https://www.google.com/recaptcha/api2/demo
Site Key: 6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
Harap selesaikan CAPTCHA ini dan laporkan 50 karakter pertama dari token.
Juga periksa saldo CapSolver saya sebelum memulai.
"""
response = agen_pengekstrak_web.run(tugas)
print("\nRespons Agen:")
print(response.content)
if __name__ == "__main__":
main()
Agno mendukung tim agen multi. Berikut cara membuat tim dengan agen penyelesaian CAPTCHA khusus:
from agno.agent import Agent
from agno.team import Team
from agno.models.openai import OpenAIChat
from agno.tools import tool
import requests
import time
CAPSOLVER_API_KEY = "API_KEY_CAPSOLVER_ANDA"
@tool
def selesaikan_captcha_apapun(
website_url: str,
website_key: str,
jenis_captcha: str = "ReCaptchaV2TaskProxyLess"
) -> str:
"""Solver CAPTCHA universal yang mendukung berbagai jenis."""
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": jenis_captcha,
"websiteURL": website_url,
"websiteKey": website_key
}
}
response = requests.post("https://api.capsolver.com/createTask", json=payload)
result = response.json()
if result.get("errorId") != 0:
return f"Error: {result.get('errorDescription')}"
task_id = result.get("taskId")
for _ in range(60):
time.sleep(2)
result = requests.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
).json()
if result.get("status") == "ready":
solution = result.get("solution", {})
return solution.get("gRecaptchaResponse") or solution.get("token")
if result.get("status") == "failed":
return f"Gagal: {result.get('errorDescription')}"
return "Timeout"
# Agen Spesialis CAPTCHA
agen_captcha = Agent(
name="Agen Spesialis CAPTCHA",
model=OpenAIChat(id="gpt-4o"),
tools=[selesaikan_captcha_apapun],
description="Ahli dalam mengidentifikasi dan menyelesaikan berbagai jenis CAPTCHA",
instructions=[
"Identifikasi jenis CAPTCHA dari analisis halaman",
"Gunakan solver yang sesuai dengan parameter yang benar",
"Laporkan keberhasilan atau kegagalan secara jelas"
]
)
# Agen Ekstraksi Data
agen_pengambil_data = Agent(
name="Pengambil Data",
model=OpenAIChat(id="gpt-4o"),
description="Mengekstrak dan memproses data dari halaman web",
instructions=[
"Mengekstrak data terstruktur dari konten HTML",
"Meminta penyelesaian CAPTCHA ketika diperlukan",
"Memvalidasi dan membersihkan data yang diekstrak"
]
)
# Membuat tim
tim_pengambil_data = Team(
name="Tim Pengambil Data Web",
agents=[agen_captcha, agen_pengambil_data],
description="Tim yang spesialis dalam pengambilan data web dengan penanganan CAPTCHA"
)
Setiap jenis CAPTCHA memerlukan metode pengiriman yang berbeda:
from selenium import webdriver
from selenium.webdriver.common.by import By
def kirim_token_recaptcha(driver, token: str):
"""Menyisipkan token reCAPTCHA dan mengirimkan"""
respons_recaptcha = driver.find_element(By.ID, "g-recaptcha-response")
driver.execute_script("arguments[0].style.display = 'block';", respons_recaptcha)
respons_recaptcha.clear()
respons_recaptcha.send_keys(token)
form = driver.find_element(By.TAG_NAME, "form")
form.submit()
def kirim_token_turnstile(driver, token: str):
"""Menyisipkan token Turnstile dan mengirimkan"""
input_turnstile = driver.find_element(By.NAME, "cf-turnstile-response")
driver.execute_script("arguments[0].value = arguments[1];", input_turnstile, token)
form = driver.find_element(By.TAG_NAME, "form")
form.submit()
import requests
def akses_halaman_cloudflare(url: str, solusi_cf: dict):
"""Gunakan solusi Tantangan Cloudflare untuk mengakses halaman yang dilindungi."""
sesi = requests.Session()
for cookie in solusi_cf["cookies"]:
sesi.cookies.set(cookie["name"], cookie["value"])
headers = {"User-Agent": solusi_cf["user_agent"]}
response = sesi.get(url, headers=headers)
return response.text
from agno.tools import tool
import time
@tool
def selesaikan_dengan_pengulangan(
website_url: str,
website_key: str,
maks_pengulangan: int = 3
) -> str:
"""Menyelesaikan CAPTCHA dengan pengulangan otomatis pada kegagalan."""
for percobaan in range(maks_pengulangan):
try:
hasil = selesaikan_recaptcha_v2(website_url, website_key)
if not hasil.startswith("Error") dan tidak hasil.startswith("Gagal"):
return hasil
except Exception as e:
if percobaan == maks_pengulangan - 1:
return f"Semua pengulangan gagal: {str(e)}"
time.sleep(2 ** percobaan) # Backoff eksponensial
return "Maksimum pengulangan tercapai"
@tool
def cek_saldo() -> float:
"""Memeriksa saldo akun CapSolver."""
response = requests.post(
"https://api.capsolver.com/getBalance",
json={"clientKey": CAPSOLVER_API_KEY}
)
return response.json().get("balance", 0)
Agno mendukung operasi async untuk kinerja yang lebih baik:
import asyncio
import aiohttp
from agno.tools import tool
@tool
async def selesaikan_captcha_async(website_url: str, website_key: str) -> str:
"""Solver CAPTCHA asinkron untuk konkurensi yang lebih baik."""
async with aiohttp.ClientSession() as sesi:
payload = {
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
}
async with sesi.post(
"https://api.capsolver.com/createTask",
json=payload
) as response:
hasil = await response.json()
if hasil.get("errorId") != 0:
return f"Error: {hasil.get('errorDescription')}"
task_id = hasil.get("taskId")
for _ in range(60):
await asyncio.sleep(2)
async with sesi.post(
"https://api.capsolver.com/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
) as response:
hasil = await response.json()
if hasil.get("status") == "ready":
solusi = hasil.get("solution", {})
return solusi.get("gRecaptchaResponse") or solusi.get("token")
if hasil.get("status") == "failed":
return f"Gagal: {hasil.get('errorDescription')}"
return "Timeout"
Mengintegrasikan CapSolver dengan Agno mengungkap potensi penuh agen AI otonom untuk tugas berbasis web. Dengan menggabungkan Agno yang cepat dan privasi tinggi dengan kemampuan penyelesaian CAPTCHA terkemuka CapSolver, pengembang dapat membangun solusi otomasi yang tangguh yang menangani mekanisme perlindungan web paling menantang.
Baik Anda membangun pipeline ekstraksi data, kerangka pengujian otomatis, atau agen web cerdas, kombinasi Agno + CapSolver memberikan kecepatan, keandalan, dan skalabilitas yang dibutuhkan untuk lingkungan produksi.
Siap memulai? Daftar di CapSolver dan gunakan kode bonus AGNO untuk bonus tambahan 6% pada recharge pertama!
Agno adalah kerangka kerja, runtime, dan kontrol multi-agen untuk membangun produk AI. Ini 529× lebih cepat daripada LangGraph dengan penggunaan memori 24× lebih rendah, dan berjalan sepenuhnya di infrastruktur Anda untuk privasi maksimal.
CapSolver terintegrasi dengan Agno melalui alat khusus yang didekorasi dengan @tool. Anda membuat fungsi yang membungkus API CapSolver, memungkinkan agen AI Anda untuk menyelesaikan tantangan CAPTCHA secara otomatis ketika menemukannya selama operasi web.
CapSolver mendukung berbagai jenis CAPTCHA seperti reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, AWS WAF, GeeTest, dan banyak lagi.
CapSolver menawarkan harga kompetitif berdasarkan jenis dan volume CAPTCHA yang diselesaikan. Kunjungi capsolver.com untuk detail harga terkini. Gunakan kode AGNO untuk bonus 5% pada recharge pertama.
Ya! Agno bersifat agnostik model dan mendukung 50+ penyedia model seperti OpenAI, Anthropic Claude, Google Gemini, Groq, dan lainnya.
Ya, Agno open-source dan dirilis di bawah lisensi MIT. Kerangka ini gratis digunakan, meskipun Anda mungkin menghadapi biaya untuk panggilan API LLM dan layanan penyelesaian CAPTCHA seperti CapSolver.
Site key biasanya ditemukan dalam sumber HTML halaman. Cari:
data-sitekey atau pemanggilan grecaptcha.render()data-sitekey dalam widget TurnstilePelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
